/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package pckFiles;

import java.util.Hashtable;

/**
 *
 * @author Portable-Maison
 */
public class Encodage {

    private String gsStringOriginal = "";
    private String gsStringEncoder = "";
    private StringBuilder gsBuilder;
    private int giTailleChaineOri = -1;
    private int giTailleEnc = -1;
    private Hashtable gaEncodage = new Hashtable ();
    private Hashtable gaDecodage = new Hashtable ();

    public Encodage(String psChaine, int piType)
    {
        if (piType == 0) // Type String passé
        {
        gsStringOriginal = psChaine;
        giTailleChaineOri = psChaine.length ();
        initialiserTableEncodage();
        }
        else if (piType == 1) // Type Enc passe
        {
        gsStringEncoder = psChaine;
        giTailleEnc = psChaine.length ();
        initialiserTableDecodage();
        }

    }

    public void initialiserTableEncodage()
    {
    gaEncodage.put("-", "%!% ");
    gaEncodage.put("", "?!? ");
    gaEncodage.put(" ", "%!% ");

    gaEncodage.put("0", "#0! ");
    gaEncodage.put("1", "#9! ");
    gaEncodage.put("2", "#2! ");
    gaEncodage.put("3", "#6! ");
    gaEncodage.put("4", "#4! ");
    gaEncodage.put("5", "#1! ");
    gaEncodage.put("6", "#5! ");
    gaEncodage.put("7", "#8! ");
    gaEncodage.put("8", "#3! ");
    gaEncodage.put("9", "#7! ");

    gaEncodage.put("a", "0A1 ");
    gaEncodage.put("b", "0A2 ");
    gaEncodage.put("c", "0A3 ");
    gaEncodage.put("d", "0A4 ");
    gaEncodage.put("e", "0A5 ");
    gaEncodage.put("f", "0A6 ");
    gaEncodage.put("g", "0A7 ");
    gaEncodage.put("h", "0A8 ");
    gaEncodage.put("i", "0A9 ");
    gaEncodage.put("j", "0A0 ");
    gaEncodage.put("k", "0B1 ");
    gaEncodage.put("l", "0B2 ");
    gaEncodage.put("m", "0B3 ");
    gaEncodage.put("n", "0B4 ");
    gaEncodage.put("o", "0B5 ");
    gaEncodage.put("p", "0B6 ");
    gaEncodage.put("q", "0B7 ");
    gaEncodage.put("r", "0B8 ");
    gaEncodage.put("s", "0B9 ");
    gaEncodage.put("t", "0B0 ");
    gaEncodage.put("u", "0C1 ");
    gaEncodage.put("v", "0C2 ");
    gaEncodage.put("w", "0C3 ");
    gaEncodage.put("x", "0C4 ");
    gaEncodage.put("y", "0C5 ");
    gaEncodage.put("z", "0C6 ");

    gaEncodage.put("A", "01A ");
    gaEncodage.put("B", "01B ");
    gaEncodage.put("C", "01C ");
    gaEncodage.put("D", "01D ");
    gaEncodage.put("E", "01E ");
    gaEncodage.put("F", "01F ");
    gaEncodage.put("G", "02A ");
    gaEncodage.put("H", "02B ");
    gaEncodage.put("I", "02C ");
    gaEncodage.put("J", "02D ");
    gaEncodage.put("K", "02E ");
    gaEncodage.put("L", "02F ");
    gaEncodage.put("M", "03A ");
    gaEncodage.put("N", "03B ");
    gaEncodage.put("O", "03C ");
    gaEncodage.put("P", "03D ");
    gaEncodage.put("Q", "03E ");
    gaEncodage.put("R", "03F ");
    gaEncodage.put("S", "04A ");
    gaEncodage.put("T", "04B ");
    gaEncodage.put("U", "04C ");
    gaEncodage.put("V", "04D ");
    gaEncodage.put("W", "04E ");
    gaEncodage.put("X", "04F ");
    gaEncodage.put("Y", "05A ");
    gaEncodage.put("Z", "05B ");

    gaEncodage.put("À", "100 ");
    gaEncodage.put("Â", "101 ");
    gaEncodage.put("Á", "102 ");
    gaEncodage.put("Ä", "103 ");
    gaEncodage.put("Æ", "104 ");
    gaEncodage.put("Ç", "105 ");
    gaEncodage.put("É", "106 ");
    gaEncodage.put("È", "107 ");
    gaEncodage.put("Ê", "108 ");
    gaEncodage.put("Ë", "109 ");
    gaEncodage.put("Ì", "110 ");
    gaEncodage.put("Í", "111 ");
    gaEncodage.put("Î", "112 ");
    gaEncodage.put("Ï", "113 ");
    gaEncodage.put("Ò", "114 ");
    gaEncodage.put("Ó", "115 ");
    gaEncodage.put("Ô", "116 ");
    gaEncodage.put("Ö", "117 ");
    gaEncodage.put("Ù", "118 ");
    gaEncodage.put("Ú", "119 ");
    gaEncodage.put("Û", "120 ");
    gaEncodage.put("Ü", "121 ");
    gaEncodage.put("Ý", "122 ");

    gaEncodage.put("à", "123 ");
    gaEncodage.put("á", "124 ");
    gaEncodage.put("â", "125 ");
    gaEncodage.put("ä", "126 ");
    gaEncodage.put("æ", "127 ");
    gaEncodage.put("ç", "128 ");
    gaEncodage.put("è", "129 ");
    gaEncodage.put("é", "130 ");
    gaEncodage.put("ê", "131 ");
    gaEncodage.put("ë", "132 ");
    gaEncodage.put("ì", "133 ");
    gaEncodage.put("í", "134 ");
    gaEncodage.put("î", "135 ");
    gaEncodage.put("ï", "136 ");
    gaEncodage.put("ò", "137 ");
    gaEncodage.put("ó", "138 ");
    gaEncodage.put("ô", "139 ");
    gaEncodage.put("ö", "140 ");
    gaEncodage.put("ù", "141 ");
    gaEncodage.put("ú", "142 ");
    gaEncodage.put("û", "143 ");
    gaEncodage.put("ü", "144 ");
    gaEncodage.put("ý", "145 ");
    }

    public void initialiserTableDecodage()
    {
    gaDecodage.put("%!% ", "-");
    gaDecodage.put("?!? ", "'");
    gaDecodage.put("%!% ", " ");

    gaDecodage.put("#0! ", "0");
    gaDecodage.put("#9! ", "1");
    gaDecodage.put("#2! ", "2");
    gaDecodage.put("#6! ", "3");
    gaDecodage.put("#4! ", "4");
    gaDecodage.put("#1! ", "5");
    gaDecodage.put("#5! ", "6");
    gaDecodage.put("#8! ", "7");
    gaDecodage.put("#3! ", "8");
    gaDecodage.put("#7! ", "9");

    gaDecodage.put("0A1 ", "a");
    gaDecodage.put("0A2 ", "b");
    gaDecodage.put("0A3 ", "c");
    gaDecodage.put("0A4 ", "d");
    gaDecodage.put("0A5 ", "e");
    gaDecodage.put("0A6 ", "f");
    gaDecodage.put("0A7 ", "g");
    gaDecodage.put("0A8 ", "h");
    gaDecodage.put("0A9 ", "i");
    gaDecodage.put("0A0 ", "j");
    gaDecodage.put("0B1 ", "k");
    gaDecodage.put("0B2 ", "l");
    gaDecodage.put("0B3 ", "m");
    gaDecodage.put("0B4 ", "n");
    gaDecodage.put("0B5 ", "o");
    gaDecodage.put("0B6 ", "p");
    gaDecodage.put("0B7 ", "q");
    gaDecodage.put("0B8 ", "r");
    gaDecodage.put("0B9 ", "s");
    gaDecodage.put("0B0 ", "t");
    gaDecodage.put("0C1 ", "u");
    gaDecodage.put("0C2 ", "v");
    gaDecodage.put("0C3 ", "w");
    gaDecodage.put("0C4 ", "x");
    gaDecodage.put("0C5 ", "y");
    gaDecodage.put("0C6 ", "z");

    gaDecodage.put("01A ", "A");
    gaDecodage.put("01B ", "B");
    gaDecodage.put("01C ", "C");
    gaDecodage.put("01D ", "D");
    gaDecodage.put("01E ", "E");
    gaDecodage.put("01F ", "F");
    gaDecodage.put("02A ", "G");
    gaDecodage.put("02B ", "H");
    gaDecodage.put("02C ", "I");
    gaDecodage.put("02D ", "J");
    gaDecodage.put("02E ", "K");
    gaDecodage.put("02F ", "L");
    gaDecodage.put("03A ", "M");
    gaDecodage.put("03B ", "N");
    gaDecodage.put("03C ", "O");
    gaDecodage.put("03D ", "P");
    gaDecodage.put("03E ", "Q");
    gaDecodage.put("03F ", "R");
    gaDecodage.put("04A ", "S");
    gaDecodage.put("04B ", "T");
    gaDecodage.put("04C ", "U");
    gaDecodage.put("04D ", "V");
    gaDecodage.put("04E ", "W");
    gaDecodage.put("04F ", "X");
    gaDecodage.put("05A ", "Y");
    gaDecodage.put("05B ", "Z");

    gaDecodage.put("123 ", "à");
    gaDecodage.put("124 ", "á");
    gaDecodage.put("125 ", "â");
    gaDecodage.put("126 ", "ä");
    gaDecodage.put("127 ", "æ");
    gaDecodage.put("128 ", "ç");
    gaDecodage.put("129 ", "è");
    gaDecodage.put("130 ", "é");
    gaDecodage.put("131 ", "ê");
    gaDecodage.put("132 ", "ë");
    gaDecodage.put("133 ", "ì");
    gaDecodage.put("134 ", "í");
    gaDecodage.put("135 ", "î");
    gaDecodage.put("136 ", "ï");
    gaDecodage.put("137 ", "ò");
    gaDecodage.put("138 ", "ó");
    gaDecodage.put("139 ", "ô");
    gaDecodage.put("140 ", "ö");
    gaDecodage.put("141 ", "ù");
    gaDecodage.put("142 ", "ú");
    gaDecodage.put("143 ", "û");
    gaDecodage.put("144 ", "ü");
    gaDecodage.put("145 ", "ý");

    gaDecodage.put("100 ", "À");
    gaDecodage.put("101 ", "Â");
    gaDecodage.put("102 ", "Á");
    gaDecodage.put("103 ", "Ä");
    gaDecodage.put("104 ", "Æ");
    gaDecodage.put("105 ", "Ç");
    gaDecodage.put("106 ", "É");
    gaDecodage.put("107 ", "È");
    gaDecodage.put("108 ", "Ê");
    gaDecodage.put("109 ", "Ë");
    gaDecodage.put("110 ", "Ì");
    gaDecodage.put("111 ", "Í");
    gaDecodage.put("112 ", "Î");
    gaDecodage.put("113 ", "Ï");
    gaDecodage.put("114 ", "Ò");
    gaDecodage.put("115 ", "Ó");
    gaDecodage.put("116 ", "Ô");
    gaDecodage.put("117 ", "Ö");
    gaDecodage.put("118 ", "Ù");
    gaDecodage.put("119 ", "Ú");
    gaDecodage.put("120 ", "Û");
    gaDecodage.put("121 ", "Ü");
    gaDecodage.put("122 ", "Ý");
    }

    public String StringToEnc()
    {
    gsBuilder = new StringBuilder(giTailleChaineOri*4);
        for (int liI= 0; liI < giTailleChaineOri; liI++)
        {
        String lsChar = gsStringOriginal.substring (liI,liI+1);
        gsBuilder.append (gaEncodage.get (lsChar));
        }
    gsStringEncoder = gsBuilder.toString();
    giTailleEnc = gsStringEncoder.length ();
    return gsBuilder.toString ();
    }

    public String EncToString()
    {
    gsBuilder = new StringBuilder(giTailleEnc/4);
    for (int liI= 0; liI < giTailleEnc; liI = liI + 4)
        {
        String lsChar = gsStringEncoder.substring (liI,liI+4);
        gsBuilder.append (gaDecodage.get (lsChar));
        }
    gsStringOriginal = gsBuilder.toString();
    giTailleChaineOri = gsStringOriginal.length ();
    return gsBuilder.toString ();
    }

  

}
